home *** CD-ROM | disk | FTP | other *** search
/ PCNet 1998 May / PCnet Mayıs 1998.iso / Multimed / Program / A_Trial.exe / data.z / JMxPlayer.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-12-04  |  17.8 KB  |  1,503 lines

  1. import java.awt.Component;
  2. import java.awt.Container;
  3. import java.awt.Dimension;
  4. import java.awt.Event;
  5. import java.awt.Frame;
  6. import java.awt.Graphics;
  7. import java.awt.Image;
  8. import java.awt.LayoutManager;
  9. import java.awt.Panel;
  10. import java.awt.Point;
  11. import java.awt.Rectangle;
  12. import java.net.MalformedURLException;
  13. import java.net.URL;
  14.  
  15. public final class JMxPlayer extends Panel implements Runnable, JMxTimeable, JMxLoadStatus {
  16.    public static final int MX_PLAYER_INIT = 0;
  17.    public static final int MX_PLAYER_STARTED = 1;
  18.    public static final int MX_PLAYER_WAITFOR_ALL = 2;
  19.    public static final int MX_PLAYER_STOP_WAITFOR_ALL = 3;
  20.    public static final int MX_PLAYER_PLAYING = 4;
  21.    public static final int MX_PLAYER_STOPPLAYING = 5;
  22.    public static final int MX_PLAYER_FAILED = 6;
  23.    public static final int MX_PLAYER_WAITFOR_SOUND = 7;
  24.    public static final int MX_PLAYER_STOP_WAITFOR_SOUND = 8;
  25.    public static final int MX_PLAYER_WAITFOR_IMAGE = 9;
  26.    public static final int MX_PLAYER_STOP_WAITFOR_IMAGE = 10;
  27.    public static final int MX_PLAYER_WAITFOR_ID = 11;
  28.    public static final int MX_SCROLL_TIME = 10;
  29.    public static final int MX_SCROLL_FAST = 15;
  30.    public static final int MX_SCROLL_MEDIUM = 30;
  31.    public static final int MX_SCROLL_SLOW = 45;
  32.    public URL m_urlDefaultPath;
  33.    public JMxApplet m_Owner;
  34.    private Frame m_BrowserFrame;
  35.    private int m_State;
  36.    public JMxMediaLoader m_MediaLoader;
  37.    public boolean m_WaitForAll = true;
  38.    public JMxMediaItem m_WaitForID;
  39.    public boolean m_bImageAllDone;
  40.    public JMxEventQ m_EventQ;
  41.    public Event m_ScrollEvt;
  42.    public Event m_PlayNextEvt;
  43.    public Thread m_PlayThread;
  44.    public int m_PlayThreadPriority = 5;
  45.    private JMxTimer m_PlayTimer;
  46.    private JMxTimer m_ScrollTimer;
  47.    private int m_PlayInterval;
  48.    private int m_NextStartTime;
  49.    private Position m_NextMediaPos;
  50.    private int m_FinalEndTime;
  51.    private JObList m_MediaList;
  52.    private JObList m_FirstFrameList;
  53.    private JObList m_PlayList;
  54.    private JObList m_ScrollList;
  55.    private JObList m_LogicList;
  56.    private JMxMedia m_MouseEffectMedia;
  57.    private JMxMedia m_LogicClickMedia;
  58.    private Point m_CurMousePoint;
  59.    public Image m_OffScrImage;
  60.    private int m_ScrollInterval;
  61.    private int m_ScrollSpeed;
  62.    private int m_ScrollTickCount;
  63.    private int m_NewNextStartTime;
  64.    int[] m_TransitionUsage;
  65.    int[] m_ClassUsage;
  66.    boolean m_RunOnce;
  67.    boolean m_UseSleep;
  68.    static final int MX_SLEEP_TIME = 100;
  69.    boolean m_JVM10;
  70.  
  71.    public boolean mouseMove(Event var1, int var2, int var3) {
  72.       this.m_EventQ.Send(var1);
  73.       return true;
  74.    }
  75.  
  76.    private int CheckFileStatus(JMxMedia var1) {
  77.       if (var1.IsLogic()) {
  78.          return 8;
  79.       } else {
  80.          JMxMediaItem var2 = var1.GetMediaItem();
  81.          if (var2 == null) {
  82.             return 4;
  83.          } else {
  84.             int var3 = var2.GetStatus();
  85.             if (var3 != 1 && !this.m_bImageAllDone) {
  86.                var2.PrepareMxImage();
  87.             }
  88.  
  89.             return var3;
  90.          }
  91.       }
  92.    }
  93.  
  94.    private void RedrawCachedImage(JObList var1, boolean var2, boolean var3) {
  95.       Graphics var4 = ((Component)this).getGraphics();
  96.       Dimension var5 = ((Component)this).size();
  97.       if (var4 != null) {
  98.          Graphics var6 = this.m_OffScrImage.getGraphics();
  99.          if (var3) {
  100.             var6.setColor(((Component)this).getBackground());
  101.             var6.fillRect(0, 0, var5.width, var5.height);
  102.          }
  103.  
  104.          if (!var1.IsEmpty()) {
  105.             Position var7 = var1.GetHeadPosition();
  106.             Object var8 = null;
  107.  
  108.             while(var7.element != null) {
  109.                JMxMedia var9 = (JMxMedia)var1.GetNext(var7);
  110.                var9.GetMediaItem().PrepareMxImage();
  111.                var9.Refresh(var6);
  112.             }
  113.          }
  114.  
  115.          if (var2) {
  116.             var4.drawImage(this.m_OffScrImage, 0, 0, this);
  117.          }
  118.  
  119.          var4.dispose();
  120.          var6.dispose();
  121.       }
  122.  
  123.    }
  124.  
  125.    private boolean CheckRolloverStatus(JMxMedia var1) {
  126.       JMxMediaItem var2 = var1.GetRolloverSoundObject();
  127.       int var3 = 0;
  128.       if (var2 != null) {
  129.          var3 = var2.GetStatus();
  130.          if (var3 == 1) {
  131.             return true;
  132.          }
  133.  
  134.          if (var3 == 4 || var3 == 2) {
  135.             var1.SetRolloverSoundObject((JMxMediaItem)null);
  136.          }
  137.       }
  138.  
  139.       var2 = var1.GetRolloverImageObject();
  140.       if (var2 != null) {
  141.          var3 = var2.GetStatus();
  142.          if (var3 == 1) {
  143.             return true;
  144.          }
  145.  
  146.          if (var3 == 4 || var3 == 2) {
  147.             var1.SetRolloverImageObject((JMxMediaItem)null);
  148.          }
  149.  
  150.          var2.PrepareMxImage();
  151.       }
  152.  
  153.       return false;
  154.    }
  155.  
  156.    private boolean StopTimeoutMedia(JObList var1, int var2) {
  157.       int var3 = var2;
  158.       boolean var4 = false;
  159.       if (!var1.IsEmpty()) {
  160.          Position var5 = var1.GetHeadPosition();
  161.          Position var6 = new Position(var5.element);
  162.          Object var7 = null;
  163.  
  164.          while(var5.element != null) {
  165.             var6.element = var5.element;
  166.             JMxMedia var10 = (JMxMedia)var1.GetNext(var5);
  167.             if (var10.GetEndTime() <= this.m_NextStartTime) {
  168.                if (!var10.GetAlwaysShow()) {
  169.                   var4 = true;
  170.                   if (this.m_MouseEffectMedia != null && var10.equals(this.m_MouseEffectMedia)) {
  171.                      Graphics var8 = ((Component)this).getGraphics();
  172.                      Graphics var9 = this.m_OffScrImage.getGraphics();
  173.                      this.HideMouseEffect(var10, var8, var9, false);
  174.                      var9.dispose();
  175.                      var8.dispose();
  176.                      this.m_MouseEffectMedia = null;
  177.                   }
  178.  
  179.                   if (this.m_LogicClickMedia != null && var10.equals(this.m_LogicClickMedia)) {
  180.                      this.m_LogicClickMedia.HideMouseEffect();
  181.                      this.m_LogicClickMedia = null;
  182.                   }
  183.  
  184.                   this.StopMedia(var10, var6);
  185.                   var1.RemoveAt(var6);
  186.                }
  187.             } else {
  188.                var3 = Math.min(var3, var10.GetEndTime());
  189.             }
  190.          }
  191.       }
  192.  
  193.       this.m_NewNextStartTime = var3;
  194.       return var4;
  195.    }
  196.  
  197.    private void CloseAllMediaOnList(JObList var1, boolean var2) {
  198.       if (!var1.IsEmpty()) {
  199.          Position var3 = var1.GetTailPosition();
  200.          Position var4 = new Position(var3.element);
  201.          Object var5 = null;
  202.  
  203.          while(var3.element != null) {
  204.             var4.element = var3.element;
  205.             JMxMedia var6 = (JMxMedia)var1.GetPrev(var3);
  206.             if (var2) {
  207.                this.StopMedia(var6, var4);
  208.             } else {
  209.                var6.Stop();
  210.             }
  211.          }
  212.       }
  213.  
  214.    }
  215.  
  216.    private boolean ProcessLogic(JMxMedia var1) {
  217.       if (var1 == null) {
  218.          return true;
  219.       } else {
  220.          JMxHotSpot var2 = var1.GetCurHotspot();
  221.          if (var2 == null) {
  222.             return true;
  223.          } else if (var2.m_Action == -1) {
  224.             return true;
  225.          } else {
  226.             int var3 = this.m_CurMousePoint.x;
  227.             int var4 = this.m_CurMousePoint.y;
  228.             if (var2.m_Action != 2 && !this.PrepareToJump()) {
  229.                return true;
  230.             } else {
  231.                switch (var2.m_Action) {
  232.                   case -1:
  233.                   default:
  234.                      return true;
  235.                   case 0:
  236.                   case 1:
  237.                      this.m_NextStartTime = var2.m_IntData;
  238.                      this.m_CurMousePoint.x = var3;
  239.                      this.m_CurMousePoint.y = var4;
  240.                      return false;
  241.                   case 2:
  242.                      String var5 = var2.m_StrData;
  243.                      String var6 = null;
  244.                      int var7 = var5.lastIndexOf(" target=");
  245.                      if (var7 != -1) {
  246.                         try {
  247.                            String var8 = "";
  248.                            var8 = var5.substring(0, var7);
  249.                            int var9 = var5.length();
  250.                            if (var7 + 8 < var9) {
  251.                               var6 = var5.substring(var7 + 8, var9);
  252.                            }
  253.  
  254.                            var5 = var8;
  255.                         } catch (StringIndexOutOfBoundsException var12) {
  256.                            var5 = var2.m_StrData;
  257.                            var6 = null;
  258.                         }
  259.                      }
  260.  
  261.                      try {
  262.                         URL var14 = new URL(this.m_urlDefaultPath, var5);
  263.                         if (var6 == null) {
  264.                            if (!this.PrepareToJump()) {
  265.                               return true;
  266.                            }
  267.  
  268.                            this.m_Owner.getAppletContext().showDocument(var14);
  269.                         } else {
  270.                            this.m_Owner.getAppletContext().showDocument(var14, var6);
  271.                         }
  272.                      } catch (MalformedURLException var11) {
  273.                         JMxLog.Log(3, "Process Logic -- malformed URL\n" + ((Throwable)var11).toString());
  274.                      }
  275.  
  276.                      return true;
  277.                }
  278.             }
  279.          }
  280.       }
  281.    }
  282.  
  283.    public void HandleScrollEvent(Event var1) {
  284.       if (!this.m_ScrollList.IsEmpty()) {
  285.          this.m_ScrollTickCount += this.m_ScrollSpeed;
  286.          if (this.m_ScrollTickCount > 0) {
  287.             Graphics var2 = ((Component)this).getGraphics();
  288.             Graphics var3 = this.m_OffScrImage.getGraphics();
  289.             Position var4 = this.m_ScrollList.GetHeadPosition();
  290.             Object var5 = null;
  291.  
  292.             while(var4.element != null) {
  293.                JMxMedia var7 = (JMxMedia)this.m_ScrollList.GetNext(var4);
  294.                if (this.m_ScrollTickCount % var7.GetTransInLength() == 0) {
  295.                   if (var7.GetTransparent()) {
  296.                      Rectangle var6 = var7.GetPlaybackRect();
  297.                      this.RefreshArea(var6, this.m_PlayList, (JMxMedia)null, (Position)null, (JMxMedia)null, var3, (JObList)null, true);
  298.                      this.RefreshArea(var6, this.m_ScrollList, var7, (Position)null, (JMxMedia)null, var3, (JObList)null, false);
  299.                   }
  300.  
  301.                   var7.Play(var2, var3);
  302.                } else {
  303.                   var7.Refresh(var3);
  304.                }
  305.             }
  306.  
  307.             if (this.m_MouseEffectMedia != null && !this.m_MouseEffectMedia.IsScrollable()) {
  308.                this.m_MouseEffectMedia.Refresh(var3);
  309.             }
  310.  
  311.             var2.drawImage(this.m_OffScrImage, 0, 0, this);
  312.             var3.dispose();
  313.             var2.dispose();
  314.             if (this.m_ScrollTickCount == MX_SCROLL_SLOW) {
  315.                this.m_ScrollTickCount = 0;
  316.             }
  317.  
  318.             this.m_ScrollTimer.Start((long)this.m_ScrollInterval);
  319.          }
  320.       }
  321.    }
  322.  
  323.    public boolean HandleRestartEvent() {
  324.       int var1 = this.m_MediaLoader.GetLoadStatus();
  325.       boolean var2 = true;
  326.       if (var1 == 0) {
  327.          var2 = false;
  328.          if (this.m_State == 3) {
  329.             this.m_State = 2;
  330.          } else if (this.m_State == 10) {
  331.             this.m_State = 9;
  332.          } else if (this.m_State == 8) {
  333.             this.m_State = 7;
  334.          } else {
  335.             var2 = true;
  336.          }
  337.       } else if (var1 == 1) {
  338.          this.SetupAllImage();
  339.          var2 = true;
  340.       }
  341.  
  342.       this.m_MediaLoader.Resume();
  343.       if (var2) {
  344.          this.StartPlaying();
  345.       }
  346.  
  347.       return true;
  348.    }
  349.  
  350.    public void HandleQuitEvent() {
  351.       this.m_State = 0;
  352.       this.m_PlayTimer.Kill();
  353.       this.m_ScrollTimer.Kill();
  354.       this.m_PlayTimer = null;
  355.       this.m_ScrollTimer = null;
  356.       this.m_MediaLoader.Stop();
  357.       this.m_MediaLoader = null;
  358.       this.ResetAllData();
  359.       this.m_FirstFrameList.RemoveAll();
  360.       this.m_MediaList.RemoveAll();
  361.       this.m_MediaList = null;
  362.       this.m_FirstFrameList = null;
  363.       this.m_PlayList = null;
  364.       this.m_ScrollList = null;
  365.       this.m_LogicList = null;
  366.    }
  367.  
  368.    public boolean FindMouseEffectMedia(JObList var1, Point var2) {
  369.       boolean var3 = false;
  370.       if (var1 == null) {
  371.          return var3;
  372.       } else {
  373.          if (!var1.IsEmpty()) {
  374.             Position var4 = var1.GetTailPosition();
  375.             Object var5 = null;
  376.             JMxLong var6 = new JMxLong(0L);
  377.  
  378.             while(var4.element != null) {
  379.                JMxMedia var7 = (JMxMedia)var1.GetPrev(var4);
  380.                if (var7.HasMouseEffect(var6, var2)) {
  381.                   var3 = true;
  382.                   if (var6.m_Value == 1L) {
  383.                      this.m_MouseEffectMedia = var7;
  384.                   }
  385.                   break;
  386.                }
  387.             }
  388.  
  389.             Object var8 = null;
  390.          }
  391.  
  392.          return var3;
  393.       }
  394.    }
  395.  
  396.    public boolean Restart() {
  397.       if (!this.m_PlayThread.isAlive()) {
  398.          return false;
  399.       } else {
  400.          this.m_EventQ.FlushAll();
  401.          Event var1 = new Event(this, 98982, (Object)null);
  402.          this.m_EventQ.Send(var1);
  403.          synchronized(this){}
  404.  
  405.          try {
  406.             try {
  407.                this.notifyAll();
  408.             } catch (Exception var8) {
  409.                JMxLog.Log(3, "Exception while waking up playthred");
  410.                ((Throwable)var8).printStackTrace();
  411.             }
  412.          } catch (Throwable var9) {
  413.             throw var9;
  414.          }
  415.  
  416.          return true;
  417.       }
  418.    }
  419.  
  420.    public void Stop() {
  421.       if (this.m_PlayThread.isAlive()) {
  422.          Event var1 = new Event(this, 98981, Thread.currentThread());
  423.          this.m_EventQ.Send(var1);
  424.          synchronized(this){}
  425.  
  426.          try {
  427.             try {
  428.                this.wait();
  429.             } catch (Exception var8) {
  430.                JMxLog.Log(3, "Exception while waiting for playthred to stop\n");
  431.                ((Throwable)var8).printStackTrace();
  432.             }
  433.          } catch (Throwable var9) {
  434.             throw var9;
  435.          }
  436.  
  437.       } else {
  438.          JMxLog.Log(3, "JMxPlayer playthread is dead\n");
  439.       }
  440.    }
  441.  
  442.    public JMxPlayer(JMxApplet var1) {
  443.       this.m_ScrollSpeed = MX_SCROLL_SLOW;
  444.       this.m_ScrollTickCount = -1;
  445.       this.m_JVM10 = true;
  446.       this.m_Owner = var1;
  447.       this.m_urlDefaultPath = this.m_Owner.getDocumentBase();
  448.       this.m_WaitForAll = this.m_Owner.m_WaitForAll;
  449.       Object var2 = this.m_Owner;
  450.  
  451.       while(var2 != null) {
  452.          var2 = ((Component)var2).getParent();
  453.          if (var2 instanceof Frame) {
  454.             this.m_BrowserFrame = (Frame)var2;
  455.             break;
  456.          }
  457.       }
  458.  
  459.       this.m_EventQ = new JMxEventQ();
  460.       this.m_ScrollEvt = new Event(this, 98985, (Object)null);
  461.       this.m_PlayNextEvt = new Event(this, 98984, (Object)null);
  462.       this.m_PlayTimer = new JMxTimer(this);
  463.       this.m_ScrollTimer = new JMxTimer(this);
  464.       this.m_CurMousePoint = new Point(-1, -1);
  465.       this.m_MediaList = new JObList();
  466.       this.m_FirstFrameList = new JObList();
  467.       this.m_PlayList = new JObList();
  468.       this.m_ScrollList = new JObList();
  469.       this.m_NextMediaPos = new Position((Object)null);
  470.       this.m_LogicList = new JObList();
  471.       ((Container)this).setLayout((LayoutManager)null);
  472.       String var3 = System.getProperty("os.name");
  473.       if (!var3.startsWith("Window")) {
  474.          this.m_UseSleep = true;
  475.       }
  476.  
  477.       String var4 = System.getProperty("java.version");
  478.       if (var4.startsWith("1.0")) {
  479.          this.m_JVM10 = true;
  480.       } else {
  481.          this.m_JVM10 = false;
  482.       }
  483.  
  484.       System.out.println("java version: " + var4);
  485.    }
  486.  
  487.    public void DrawTopImages(JObList var1, Graphics var2, Rectangle var3) {
  488.       if (var1 != null) {
  489.          if (!var1.IsEmpty()) {
  490.             Position var4 = var1.GetHeadPosition();
  491.             Object var5 = null;
  492.             new Rectangle(0, 0, 0, 0);
  493.  
  494.             while(var4.element != null) {
  495.                JMxMedia var8 = (JMxMedia)var1.GetNext(var4);
  496.                Rectangle var6 = var3.intersection(var8.GetPlaybackRect());
  497.                if (!var6.isEmpty()) {
  498.                   Graphics var7 = var2.create(var6.x - var3.x, var6.y - var3.y, var6.width, var6.height);
  499.                   var7.translate(-var6.x, -var6.y);
  500.                   var8.Refresh(var7);
  501.                   var7.dispose();
  502.                }
  503.             }
  504.          }
  505.  
  506.       }
  507.    }
  508.  
  509.    public boolean HandleMouseDown(Event var1) {
  510.       if (this.m_State != 4 && this.m_State != 11) {
  511.          this.m_CurMousePoint.x = var1.x;
  512.          this.m_CurMousePoint.y = var1.y;
  513.          return true;
  514.       } else {
  515.          if (var1.x != this.m_CurMousePoint.x || var1.y != this.m_CurMousePoint.y || this.m_MouseEffectMedia == null && this.m_LogicClickMedia == null) {
  516.             this.ProcessMouseEffect(true);
  517.          }
  518.  
  519.          JMxMedia var2 = this.m_LogicClickMedia;
  520.          if (var2 == null) {
  521.             var2 = this.m_MouseEffectMedia;
  522.          }
  523.  
  524.          if (var2 != null) {
  525.             boolean var3 = this.ProcessLogic(var2);
  526.             if (!var3) {
  527.                this.ProcessMoreMedia();
  528.             }
  529.          }
  530.  
  531.          return true;
  532.       }
  533.    }
  534.  
  535.    private boolean BuildNextPlayList(JObList var1, JObList var2) {
  536.       Position var3 = new Position(this.m_NextMediaPos.element);
  537.       Position var4 = new Position(this.m_NextMediaPos.element);
  538.       Object var5 = null;
  539.       Position var6 = null;
  540.       JMxMedia var7 = null;
  541.       int var8 = -1;
  542.       JObList var9 = new JObList();
  543.  
  544.       while(var4.element != null) {
  545.          var3.element = var4.element;
  546.          JMxMedia var12 = (JMxMedia)this.m_MediaList.GetNext(var4);
  547.          if (var12.GetStartTime() > this.m_NextStartTime) {
  548.             var6 = var3;
  549.             var7 = var12;
  550.             break;
  551.          }
  552.  
  553.          if (var12.GetEndTime() > this.m_NextStartTime) {
  554.             var8 = this.CheckFileStatus(var12);
  555.             boolean var10 = false;
  556.             if (var8 == 1) {
  557.                var10 = true;
  558.             } else if (var8 == 8) {
  559.                var10 = this.CheckRolloverStatus(var12);
  560.                if (!var10) {
  561.                   if (var12.IsScrollable()) {
  562.                      var2.AddTail(var12);
  563.                   } else if (var12.IsLogic() && var12.HasHotSpot()) {
  564.                      var9.AddTail(var12);
  565.                   } else {
  566.                      var1.AddTail(var12);
  567.                   }
  568.  
  569.                   if (!var12.GetAlwaysShow()) {
  570.                      this.m_NewNextStartTime = Math.min(this.m_NewNextStartTime, var12.GetEndTime());
  571.                   }
  572.                }
  573.             }
  574.  
  575.             if (var10) {
  576.                this.m_State = 11;
  577.                this.SetWaitID(var12.GetMediaItem());
  578.                var2.RemoveAll();
  579.                var1.RemoveAll();
  580.                var9.RemoveAll();
  581.                Object var14 = null;
  582.                this.m_NewNextStartTime = this.m_NextStartTime;
  583.                return false;
  584.             }
  585.          }
  586.       }
  587.  
  588.       if (!var1.IsEmpty()) {
  589.          Position var16 = var1.GetHeadPosition();
  590.          Object var11 = null;
  591.  
  592.          while(var16.element != null) {
  593.             JMxMedia var18 = (JMxMedia)var1.GetNext(var16);
  594.             this.m_PlayList.AddTail(var18);
  595.          }
  596.       }
  597.  
  598.       if (!var9.IsEmpty()) {
  599.          Position var17 = var9.GetHeadPosition();
  600.          Object var19 = null;
  601.  
  602.          while(var17.element != null) {
  603.             JMxMedia var20 = (JMxMedia)var9.GetNext(var17);
  604.             this.m_LogicList.AddTail(var20);
  605.          }
  606.  
  607.          var9.RemoveAll();
  608.       }
  609.  
  610.       Object var15 = null;
  611.       if (var6 != null) {
  612.          this.m_NewNextStartTime = Math.min(this.m_NewNextStartTime, var7.GetStartTime());
  613.       }
  614.  
  615.       if (var6 != null) {
  616.          this.m_NextMediaPos.element = var6.element;
  617.       } else {
  618.          this.m_NextMediaPos.element = null;
  619.       }
  620.  
  621.       return true;
  622.    }
  623.  
  624.    public void RedrawDirtyRect(Rectangle var1, Graphics var2) {
  625.       this.RefreshArea(var1, this.m_PlayList, (JMxMedia)null, (Position)null, (JMxMedia)null, var2, (JObList)null, true);
  626.       this.RefreshArea(var1, this.m_ScrollList, (JMxMedia)null, (Position)null, (JMxMedia)null, var2, (JObList)null, false);
  627.    }
  628.  
  629.    public void SetMediaList(JObList var1) {
  630.       if (var1 == null) {
  631.          this.m_MediaList.RemoveAll();
  632.       } else {
  633.          this.m_MediaList = var1;
  634.       }
  635.  
  636.       for(int var2 = 0; var2 < this.m_TransitionUsage.length; ++var2) {
  637.          JMxGraphic.CreateTransitionObj(this.m_TransitionUsage[var2]);
  638.       }
  639.  
  640.    }
  641.  
  642.    public void SetClassUsage(int[] var1) {
  643.       if (var1 != null) {
  644.          this.m_ClassUsage = var1;
  645.       }
  646.  
  647.    }
  648.  
  649.    public void SetupAllImage() {
  650.       if (!this.m_bImageAllDone) {
  651.          if (!this.m_MediaList.IsEmpty()) {
  652.             Position var1 = this.m_MediaList.GetHeadPosition();
  653.             Object var2 = null;
  654.  
  655.             while(var1.element != null) {
  656.                JMxMedia var4 = (JMxMedia)this.m_MediaList.GetNext(var1);
  657.                JMxMediaItem var3 = var4.GetMediaItem();
  658.                if (var3 != null) {
  659.                   var3.PrepareMxImage();
  660.                }
  661.  
  662.                var3 = var4.GetRolloverImageObject();
  663.                if (var3 != null) {
  664.                   var3.PrepareMxImage();
  665.                }
  666.             }
  667.          }
  668.  
  669.          this.m_bImageAllDone = true;
  670.       }
  671.    }
  672.  
  673.    public void update(Graphics var1) {
  674.       this.paint(var1);
  675.    }
  676.  
  677.    public boolean HandlePaint(Event var1) {
  678.       Graphics var2 = ((Component)this).getGraphics();
  679.       if (var2 == null) {
  680.          return true;
  681.       } else {
  682.          if (this.m_OffScrImage != null) {
  683.             var2.drawImage(this.m_OffScrImage, 0, 0, this);
  684.          } else {
  685.             this.m_Owner.showStatus("Java media downloading...");
  686.             var2.drawString("Java media downloading...", 10, 20);
  687.          }
  688.  
  689.          var2.dispose();
  690.          return true;
  691.       }
  692.    }
  693.  
  694.    public void Quit() {
  695.       if (this.m_PlayThread.isAlive()) {
  696.          Event var1 = new Event(this, 98983, (Object)null);
  697.          this.m_EventQ.Send(var1);
  698.       }
  699.  
  700.       synchronized(this){}
  701.  
  702.       try {
  703.          try {
  704.             this.notifyAll();
  705.          } catch (Exception var7) {
  706.             JMxLog.Log(3, "Exception while waking up playthred");
  707.             ((Throwable)var7).printStackTrace();
  708.          }
  709.       } catch (Throwable var8) {
  710.          throw var8;
  711.       }
  712.  
  713.    }
  714.  
  715.    private void DrawFirstFrame() {
  716.       Dimension var1 = ((Component)this).size();
  717.       if (this.m_OffScrImage == null) {
  718.          this.m_OffScrImage = ((Component)this).createImage(var1.width, var1.height);
  719.       }
  720.  
  721.       this.RedrawCachedImage(this.m_FirstFrameList, true, true);
  722.    }
  723.  
  724.    private void SetWaitID(JMxMediaItem var1) {
  725.       if (var1 == null) {
  726.          this.m_WaitForID = null;
  727.          this.m_Owner.showStatus("");
  728.       } else {
  729.          this.m_WaitForID = var1;
  730.          this.m_Owner.showStatus("Java media downloading...");
  731.       }
  732.    }
  733.  
  734.    public boolean HandleMouseMove(Event var1) {
  735.       this.m_CurMousePoint.x = var1.x;
  736.       this.m_CurMousePoint.y = var1.y;
  737.       if (this.m_State != 4 && this.m_State != 11) {
  738.          return true;
  739.       } else {
  740.          this.ProcessMouseEffect(true);
  741.          return true;
  742.       }
  743.    }
  744.  
  745.    private boolean PrepareToJump() {
  746.       this.CloseAllMedia(true);
  747.       this.ResetAllData();
  748.       this.m_PlayTimer.Stop();
  749.       this.m_ScrollTimer.Stop();
  750.       Dimension var1 = ((Component)this).size();
  751.       Graphics var2 = this.m_OffScrImage.getGraphics();
  752.       var2.setColor(((Component)this).getBackground());
  753.       var2.fillRect(0, 0, var1.width, var1.height);
  754.       var2.dispose();
  755.       Event var3 = this.m_EventQ.GetStopEvent();
  756.       if (var3 == null) {
  757.          return true;
  758.       } else {
  759.          this.HandleStopEvent((Thread)var3.arg);
  760.          return false;
  761.       }
  762.    }
  763.  
  764.    private void ProcessMouseEffect(boolean var1) {
  765.       Graphics var2 = ((Component)this).getGraphics();
  766.       Graphics var3 = this.m_OffScrImage.getGraphics();
  767.       boolean var4 = false;
  768.       JMxMedia var5 = this.m_MouseEffectMedia;
  769.       this.m_MouseEffectMedia = null;
  770.       var4 = this.FindMouseEffectMedia(this.m_ScrollList, this.m_CurMousePoint);
  771.       if (!var4) {
  772.          var4 = this.FindMouseEffectMedia(this.m_PlayList, this.m_CurMousePoint);
  773.       }
  774.  
  775.       if (this.m_MouseEffectMedia != null && var5 != null) {
  776.          if (!var5.equals(this.m_MouseEffectMedia)) {
  777.             this.HideMouseEffect(var5, var2, var3, var1);
  778.             this.ShowMouseEffect(this.m_MouseEffectMedia, var2, var3, var1);
  779.          } else if (this.m_MouseEffectMedia.IsHotSpotChangedWithin()) {
  780.             this.ShowMouseEffect(this.m_MouseEffectMedia, var2, var3, var1);
  781.          } else {
  782.             this.m_MouseEffectMedia.Refresh(var3);
  783.          }
  784.       } else if (var5 != null && this.m_MouseEffectMedia == null) {
  785.          this.HideMouseEffect(var5, var2, var3, var1);
  786.       } else if (var5 == null && this.m_MouseEffectMedia != null) {
  787.          this.ShowMouseEffect(this.m_MouseEffectMedia, var2, var3, var1);
  788.       }
  789.  
  790.       var3.dispose();
  791.       var2.dispose();
  792.       byte var6 = 0;
  793.       this.m_LogicClickMedia = null;
  794.       JMxMedia var7 = this.m_MouseEffectMedia;
  795.       this.m_MouseEffectMedia = null;
  796.       this.FindMouseEffectMedia(this.m_LogicList, this.m_CurMousePoint);
  797.       this.m_LogicClickMedia = this.m_MouseEffectMedia;
  798.       this.m_MouseEffectMedia = var7;
  799.       if (this.m_LogicClickMedia != null) {
  800.          var6 = 12;
  801.       } else if (this.m_MouseEffectMedia != null && this.m_MouseEffectMedia.HasHotSpot()) {
  802.          var6 = 12;
  803.       }
  804.  
  805.       if (this.m_BrowserFrame != null) {
  806.          this.m_BrowserFrame.setCursor(var6);
  807.       }
  808.  
  809.    }
  810.  
  811.    private void HideMouseEffect(JMxMedia var1, Graphics var2, Graphics var3, boolean var4) {
  812.       boolean var5 = var1.HideMouseEffect();
  813.       if (var5) {
  814.          Rectangle var6 = var1.GetPlaybackRect();
  815.          this.RefreshArea(var6, this.m_PlayList, (JMxMedia)null, (Position)null, (JMxMedia)null, var3, (JObList)null, true);
  816.          this.RefreshArea(var6, this.m_ScrollList, (JMxMedia)null, (Position)null, (JMxMedia)null, var3, (JObList)null, false);
  817.          if (var4) {
  818.             Graphics var7 = var2.create(var6.x, var6.y, var6.width, var6.height);
  819.             var7.translate(-var6.x, -var6.y);
  820.             var7.drawImage(this.m_OffScrImage, 0, 0, this);
  821.             var7.dispose();
  822.             Object var8 = null;
  823.          }
  824.       }
  825.  
  826.    }
  827.  
  828.    public boolean mouseExit(Event var1, int var2, int var3) {
  829.       this.m_EventQ.Send(var1);
  830.       return true;
  831.    }
  832.  
  833.    private void StartMediaDownload() {
  834.       boolean var1 = true;
  835.       this.m_MediaLoader = new JMxMediaLoader(this);
  836.       if (!this.m_MediaList.IsEmpty()) {
  837.          Position var2 = this.m_MediaList.GetHeadPosition();
  838.          Object var3 = null;
  839.          Object var4 = null;
  840.          boolean var5 = false;
  841.          Rectangle var6 = new Rectangle(0, 0, 0, 0);
  842.          boolean var7 = false;
  843.  
  844.          while(var2.element != null) {
  845.             JMxMedia var10 = (JMxMedia)this.m_MediaList.GetNext(var2);
  846.             String var8 = var10.GetLiteFileName();
  847.             if (var8 != null && var8.length() != 0) {
  848.                if (var10.IsAudio()) {
  849.                   var10.SetMediaItem(this.m_MediaLoader.AddSound(var8));
  850.                } else if (var10.IsGraphic()) {
  851.                   Rectangle var11 = var10.GetPlaybackRect();
  852.                   var5 = var10.GetTransparent();
  853.                   var7 = var10.AdjustGraphicRect(var6);
  854.                   var10.SetMediaItem(this.m_MediaLoader.AddImage(var8, var11.width, var11.height, var5, var7, var6.width, var6.height));
  855.                   String var9 = var10.GetRolloverSoundFileName();
  856.                   if (var9.length() != 0) {
  857.                      var10.SetRolloverSoundObject(this.m_MediaLoader.AddSound(var9));
  858.                   }
  859.  
  860.                   var9 = var10.GetRolloverImageFileName();
  861.                   if (var9.length() != 0) {
  862.                      var10.SetRolloverImageObject(this.m_MediaLoader.AddImage(var9, var11.width, var11.height, var5, var7, var6.width, var6.height));
  863.                   }
  864.  
  865.                   if (var10.GetStartTime() == this.m_NextStartTime) {
  866.                      if (var10.GetTransInType() == 0) {
  867.                         if (!var10.IsAudio() && var1) {
  868.                            this.m_FirstFrameList.AddTail(var10);
  869.                            var10.SetInFirstFrame();
  870.                         }
  871.                      } else {
  872.                         var1 = false;
  873.                      }
  874.                   }
  875.                }
  876.             }
  877.          }
  878.  
  879.          this.m_MediaLoader.StartLoading(this.m_WaitForAll);
  880.       }
  881.  
  882.    }
  883.  
  884.    public void paint(Graphics var1) {
  885.       if (this.m_EventQ != null) {
  886.          Event var2 = new Event(this, 98980, (Object)null);
  887.          this.m_EventQ.Send(var2);
  888.       }
  889.    }
  890.  
  891.    public void HandlePlayEvent() {
  892.       if (!this.m_ScrollList.IsEmpty()) {
  893.          this.m_ScrollTimer.Stop();
  894.       }
  895.  
  896.       this.StopTimeoutMedia(this.m_PlayList, this.m_FinalEndTime);
  897.       this.StopTimeoutMedia(this.m_ScrollList, this.m_NewNextStartTime);
  898.       this.StopTimeoutMedia(this.m_LogicList, this.m_NewNextStartTime);
  899.       this.ProcessMoreMedia();
  900.    }
  901.  
  902.    private void ScaleAllMedia() {
  903.       this.m_FinalEndTime = 0;
  904.       int var1 = 0;
  905.       int var2 = 0;
  906.       Dimension var3 = ((Component)this).size();
  907.       if (var3.height != 0 && var3.width != 0) {
  908.          if (!this.m_MediaList.IsEmpty()) {
  909.             Position var4 = this.m_MediaList.GetHeadPosition();
  910.             Object var5 = null;
  911.  
  912.             for(Object var6 = null; var4.element != null; this.m_FinalEndTime = Math.max(this.m_FinalEndTime, var12.GetEndTime())) {
  913.                var12 = (JMxMedia)this.m_MediaList.GetNext(var4);
  914.                Rectangle var15 = var12.GetLayoutRect();
  915.                var1 = Math.max(var1, var15.x + var15.width);
  916.                var2 = Math.max(var2, var15.y + var15.height);
  917.             }
  918.  
  919.             if (var1 == 0 || var2 == 0) {
  920.                return;
  921.             }
  922.  
  923.             double var7 = (double)var3.width / (double)var1;
  924.             double var9 = (double)var3.height / (double)var2;
  925.             var4 = this.m_MediaList.GetHeadPosition();
  926.             var5 = null;
  927.  
  928.             while(var4.element != null) {
  929.                JMxMedia var14 = (JMxMedia)this.m_MediaList.GetNext(var4);
  930.                Rectangle var16 = var14.GetLayoutRect();
  931.                var14.SetPlaybackRect((int)((double)var16.x * var7), (int)((double)var16.y * var9), (int)((double)var16.width * var7), (int)((double)var16.height * var9), var7, var9);
  932.             }
  933.          }
  934.  
  935.       }
  936.    }
  937.  
  938.    private void StopMedia(JMxMedia var1, Position var2) {
  939.       if (!var1.IsGraphic()) {
  940.          var1.Stop();
  941.       } else {
  942.          Graphics var3 = this.m_OffScrImage.getGraphics();
  943.          Graphics var4 = ((Component)this).getGraphics();
  944.          if (var1.HasTransOutEffect()) {
  945.             var4.drawImage(this.m_OffScrImage, 0, 0, this);
  946.          }
  947.  
  948.          Rectangle var5 = var1.GetPlaybackRect();
  949.          JObList var6 = new JObList();
  950.          this.RefreshArea(var5, this.m_PlayList, (JMxMedia)null, (Position)null, var1, var3, var6, true);
  951.          this.RefreshArea(var5, this.m_ScrollList, (JMxMedia)null, (Position)null, var1, var3, var6, false);
  952.          if (this.m_MouseEffectMedia != null && !this.m_MouseEffectMedia.equals(var1) && !this.m_MouseEffectMedia.IsScrollable() && var5.intersects(this.m_MouseEffectMedia.GetPlaybackRect())) {
  953.             this.m_MouseEffectMedia.Refresh(var3);
  954.             var6.AddTail(this.m_MouseEffectMedia);
  955.          }
  956.  
  957.          if (!var1.HasTransOutEffect()) {
  958.             var1.Stop();
  959.          } else {
  960.             var1.Stop(this.m_OffScrImage, var6, var4, var3);
  961.          }
  962.  
  963.          var3.dispose();
  964.          Object var7 = null;
  965.          var4.dispose();
  966.          Object var8 = null;
  967.          Object var9 = null;
  968.          Object var10 = null;
  969.       }
  970.    }
  971.  
  972.    private void CloseAllMedia(boolean var1) {
  973.       if (this.m_WaitForID != null) {
  974.          this.SetWaitID((JMxMediaItem)null);
  975.       }
  976.  
  977.       this.CloseAllMediaOnList(this.m_ScrollList, var1);
  978.       this.CloseAllMediaOnList(this.m_PlayList, var1);
  979.    }
  980.  
  981.    public void tick(JMxTimer var1) {
  982.       Event var2 = null;
  983.       if (var1 == this.m_ScrollTimer) {
  984.          var2 = this.m_ScrollEvt;
  985.       } else if (var1 == this.m_PlayTimer) {
  986.          var2 = this.m_PlayNextEvt;
  987.       }
  988.  
  989.       if (var2 != null) {
  990.          this.m_EventQ.Send(var2);
  991.       }
  992.  
  993.    }
  994.  
  995.    private void RefreshArea(Rectangle var1, JObList var2, JMxMedia var3, Position var4, JMxMedia var5, Graphics var6, JObList var7, boolean var8) {
  996.       if (var8) {
  997.          var6.setColor(((Component)this).getBackground());
  998.          var6.fillRect(var1.x, var1.y, var1.width, var1.height);
  999.       }
  1000.  
  1001.       if (!var2.IsEmpty()) {
  1002.          Object var9 = null;
  1003.          Position var15;
  1004.          if (var4 != null) {
  1005.             var15 = new Position(var4.element);
  1006.             var2.GetNext(var15);
  1007.          } else {
  1008.             var15 = var2.GetHeadPosition();
  1009.          }
  1010.  
  1011.          Object var10 = null;
  1012.          Object var11 = null;
  1013.          new Rectangle(0, 0, 0, 0);
  1014.          boolean var13 = false;
  1015.  
  1016.          while(var15.element != null) {
  1017.             JMxMedia var16 = (JMxMedia)var2.GetNext(var15);
  1018.             if (var3 != null && var3.equals(var16)) {
  1019.                break;
  1020.             }
  1021.  
  1022.             if (var5 != null && var5.equals(var16)) {
  1023.                var13 = true;
  1024.             } else {
  1025.                Rectangle var17 = var16.GetPlaybackRect();
  1026.                Rectangle var12 = var1.intersection(var17);
  1027.                if (!var12.isEmpty()) {
  1028.                   Graphics var14 = var6.create(var12.x, var12.y, var12.width, var12.height);
  1029.                   var14.translate(-var12.x, -var12.y);
  1030.                   var16.Refresh(var14);
  1031.                   var14.dispose();
  1032.                   if (var7 != null && var13) {
  1033.                      var7.AddTail(var16);
  1034.                   }
  1035.                }
  1036.             }
  1037.          }
  1038.       }
  1039.  
  1040.    }
  1041.  
  1042.    private void ProcessMoreMedia() {
  1043.       boolean var1 = true;
  1044.       Graphics var2 = ((Component)this).getGraphics();
  1045.       Graphics var3 = this.m_OffScrImage.getGraphics();
  1046.       if (this.m_NextMediaPos != null) {
  1047.          JObList var4 = new JObList();
  1048.          JObList var5 = new JObList();
  1049.          JMxMedia var6 = null;
  1050.          boolean var7 = false;
  1051.  
  1052.          while(!var7) {
  1053.             var1 = this.BuildNextPlayList(var4, var5);
  1054.             if (var1) {
  1055.                if (!var4.IsEmpty()) {
  1056.                   var6 = this.PlayMediaOnList(var4, var2, var3, true);
  1057.                   var4.RemoveAll();
  1058.                }
  1059.  
  1060.                if (!this.m_ScrollList.IsEmpty()) {
  1061.                   this.PlayMediaOnList(this.m_ScrollList, var2, var3, false);
  1062.                }
  1063.  
  1064.                if (!var5.IsEmpty()) {
  1065.                   this.PlayMediaOnList(var5, var2, var3, true);
  1066.                   Position var8 = var5.GetHeadPosition();
  1067.                   Object var9 = null;
  1068.  
  1069.                   while(var8.element != null) {
  1070.                      JMxMedia var14 = (JMxMedia)var5.GetNext(var8);
  1071.                      this.m_ScrollList.AddTail(var14);
  1072.                   }
  1073.  
  1074.                   var5.RemoveAll();
  1075.                }
  1076.  
  1077.                if (var6 == null) {
  1078.                   var7 = true;
  1079.                } else {
  1080.                   var2.drawImage(this.m_OffScrImage, 0, 0, this);
  1081.                   var7 = this.ProcessLogic(var6);
  1082.                   if (this.m_State == 5) {
  1083.                      var2.dispose();
  1084.                      var3.dispose();
  1085.                      return;
  1086.                   }
  1087.                }
  1088.             } else {
  1089.                var7 = true;
  1090.             }
  1091.          }
  1092.       }
  1093.  
  1094.       var2.dispose();
  1095.       var3.dispose();
  1096.       Event var12 = this.m_EventQ.GetMouseEvent();
  1097.       if (var12 != null) {
  1098.          this.m_CurMousePoint.x = var12.x;
  1099.          this.m_CurMousePoint.y = var12.y;
  1100.          Object var13 = null;
  1101.       }
  1102.  
  1103.       if (this.m_CurMousePoint.x != -1 && this.m_CurMousePoint.y != -1) {
  1104.          this.ProcessMouseEffect(false);
  1105.       }
  1106.  
  1107.       var2 = ((Component)this).getGraphics();
  1108.       var2.drawImage(this.m_OffScrImage, 0, 0, this);
  1109.       var2.dispose();
  1110.       this.m_EventQ.FlushAll(98985);
  1111.       this.SetNextPlayEvent();
  1112.    }
  1113.  
  1114.    private JMxMedia PlayMediaOnList(JObList var1, Graphics var2, Graphics var3, boolean var4) {
  1115.       boolean var5 = true;
  1116.       JMxMedia var6 = null;
  1117.       if (!var1.IsEmpty()) {
  1118.          Position var7 = var1.GetHeadPosition();
  1119.          Object var8 = null;
  1120.  
  1121.          while(var7.element != null) {
  1122.             JMxMedia var10 = (JMxMedia)var1.GetNext(var7);
  1123.             if (var4) {
  1124.                if (var10.HasTransInEffect()) {
  1125.                   var2.drawImage(this.m_OffScrImage, 0, 0, this);
  1126.                }
  1127.  
  1128.                var5 = var10.Play(var2, var3);
  1129.                if (!var5) {
  1130.                   if (var10.IsLogic()) {
  1131.                      var6 = var10;
  1132.                   }
  1133.                   break;
  1134.                }
  1135.             } else {
  1136.                var10.Refresh(var3);
  1137.             }
  1138.          }
  1139.       }
  1140.  
  1141.       return var6;
  1142.    }
  1143.  
  1144.    public void SetTransitionUsage(int[] var1) {
  1145.       if (var1 != null) {
  1146.          this.m_TransitionUsage = var1;
  1147.       }
  1148.  
  1149.    }
  1150.  
  1151.    private void StartPlaying() {
  1152.       this.m_State = 4;
  1153.       Dimension var1 = ((Component)this).size();
  1154.       if (this.m_OffScrImage == null) {
  1155.          this.m_OffScrImage = ((Component)this).createImage(var1.width, var1.height);
  1156.       }
  1157.  
  1158.       if (!this.m_RunOnce) {
  1159.          this.m_RunOnce = true;
  1160.          Graphics var2 = this.m_OffScrImage.getGraphics();
  1161.          Image var3 = ((Component)this).createImage(var1.width, var1.height);
  1162.          Graphics var4 = var3.getGraphics();
  1163.          JObList var5 = new JObList();
  1164.          if (!this.m_MediaList.IsEmpty()) {
  1165.             Position var6 = this.m_MediaList.GetHeadPosition();
  1166.             Object var7 = null;
  1167.  
  1168.             while(var6.element != null) {
  1169.                JMxMedia var15 = (JMxMedia)this.m_MediaList.GetNext(var6);
  1170.                if (var15.HasTransInEffect()) {
  1171.                   int var8 = var15.GetTransInType();
  1172.                   if (!var15.GetTransparent() && (var8 == 6 || var8 == 54 || var8 == 55)) {
  1173.                      var15.Play(var4, var2);
  1174.                   }
  1175.                }
  1176.  
  1177.                if (var15.HasTransOutEffect()) {
  1178.                   int var16 = var15.GetTransOutType();
  1179.                   if (!var15.GetTransparent() && (var16 == 6 || var16 == 54 || var16 == 55)) {
  1180.                      var15.Stop(this.m_OffScrImage, var5, var4, var2);
  1181.                   }
  1182.                }
  1183.             }
  1184.          }
  1185.  
  1186.          var2.setColor(((Component)this).getBackground());
  1187.          var2.fillRect(0, 0, var1.width, var1.height);
  1188.          var2.dispose();
  1189.          Object var9 = null;
  1190.          var4.dispose();
  1191.          Object var13 = null;
  1192.          var3.flush();
  1193.          Object var12 = null;
  1194.          Object var14 = null;
  1195.       } else {
  1196.          Graphics var10 = this.m_OffScrImage.getGraphics();
  1197.          var10.setColor(((Component)this).getBackground());
  1198.          var10.fillRect(0, 0, var1.width, var1.height);
  1199.          var10.dispose();
  1200.          Object var11 = null;
  1201.       }
  1202.  
  1203.       this.m_Owner.showStatus("AURALINE Java Player Applet");
  1204.       this.HandlePlayEvent();
  1205.    }
  1206.  
  1207.    public boolean mouseDown(Event var1, int var2, int var3) {
  1208.       this.m_EventQ.Send(var1);
  1209.       return true;
  1210.    }
  1211.  
  1212.    private void ResetAllData() {
  1213.       if (this.m_WaitForID != null) {
  1214.          this.SetWaitID((JMxMediaItem)null);
  1215.       }
  1216.  
  1217.       this.m_PlayList.RemoveAll();
  1218.       this.m_ScrollList.RemoveAll();
  1219.       this.m_LogicList.RemoveAll();
  1220.       this.m_MouseEffectMedia = null;
  1221.       this.m_CurMousePoint.x = -1;
  1222.       this.m_CurMousePoint.y = -1;
  1223.       this.m_LogicClickMedia = null;
  1224.       this.m_PlayInterval = 0;
  1225.       this.m_NewNextStartTime = this.m_FinalEndTime;
  1226.       if (!this.m_MediaList.IsEmpty()) {
  1227.          this.m_NextMediaPos = this.m_MediaList.GetHeadPosition();
  1228.          JMxMedia var1 = (JMxMedia)this.m_MediaList.GetHead();
  1229.          this.m_NextStartTime = var1.GetStartTime();
  1230.       } else {
  1231.          this.m_NextStartTime = 0;
  1232.          this.m_FinalEndTime = 0;
  1233.          this.m_NextMediaPos.element = null;
  1234.       }
  1235.    }
  1236.  
  1237.    private void ShowMouseEffect(JMxMedia var1, Graphics var2, Graphics var3, boolean var4) {
  1238.       if (var1.GetRolloverType() != 1 && var1.GetRolloverType() != 2 && !var1.IsHighLightable()) {
  1239.          var1.ShowMouseEffect(var3);
  1240.       } else {
  1241.          Rectangle var5 = var1.GetPlaybackRect();
  1242.          JObList var6 = null;
  1243.          if (var1.IsHighLightable()) {
  1244.             var6 = new JObList();
  1245.          }
  1246.  
  1247.          this.RefreshArea(var5, this.m_PlayList, (JMxMedia)null, (Position)null, var1, var3, (JObList)null, true);
  1248.          this.RefreshArea(var5, this.m_ScrollList, (JMxMedia)null, (Position)null, var1, var3, var6, false);
  1249.          var1.ShowMouseEffect(var3);
  1250.          Graphics var7 = var3.create(var5.x, var5.y, var5.width, var5.height);
  1251.          if (var6 != null) {
  1252.             this.DrawTopImages(var6, var7, var5);
  1253.          }
  1254.  
  1255.          var7.dispose();
  1256.          Object var9 = null;
  1257.          if (var4) {
  1258.             Graphics var8 = var2.create(var5.x, var5.y, var5.width, var5.height);
  1259.             var8.translate(-var5.x, -var5.y);
  1260.             var8.drawImage(this.m_OffScrImage, 0, 0, this);
  1261.             var8.dispose();
  1262.             Object var10 = null;
  1263.             return;
  1264.          }
  1265.       }
  1266.  
  1267.    }
  1268.  
  1269.    public void run() {
  1270.       if (this.m_State == 1) {
  1271.          this.m_PlayThreadPriority = this.m_PlayThread.getPriority();
  1272.          if (this.m_WaitForAll) {
  1273.             this.m_State = 2;
  1274.          } else {
  1275.             this.m_State = 7;
  1276.          }
  1277.  
  1278.          this.ResetAllData();
  1279.          this.ScaleAllMedia();
  1280.          this.StartMediaDownload();
  1281.       }
  1282.  
  1283.       while(true) {
  1284.          Event var1 = this.m_EventQ.Recv();
  1285.          if (var1 == null) {
  1286.             if (this.m_UseSleep) {
  1287.                try {
  1288.                   Thread.sleep(100L);
  1289.                } catch (InterruptedException var5) {
  1290.                   ((Throwable)var5).printStackTrace();
  1291.                }
  1292.             } else {
  1293.                Thread.yield();
  1294.             }
  1295.          } else {
  1296.             switch (var1.id) {
  1297.                case 501:
  1298.                   this.HandleMouseDown(var1);
  1299.                   break;
  1300.                case 503:
  1301.                   this.HandleMouseMove(var1);
  1302.                   break;
  1303.                case 505:
  1304.                   this.HandleMouseExit(var1);
  1305.                   break;
  1306.                case 98980:
  1307.                   this.HandlePaint(var1);
  1308.                   break;
  1309.                case 98981:
  1310.                   this.HandleStopEvent((Thread)var1.arg);
  1311.                   break;
  1312.                case 98982:
  1313.                   if (!this.HandleRestartEvent()) {
  1314.                      return;
  1315.                   }
  1316.                   break;
  1317.                case 98983:
  1318.                   this.HandleQuitEvent();
  1319.                   return;
  1320.                case 98984:
  1321.                   this.HandlePlayEvent();
  1322.                   break;
  1323.                case 98985:
  1324.                   this.HandleScrollEvent(var1);
  1325.                   break;
  1326.                case 98986:
  1327.                   switch (this.m_State) {
  1328.                      case 2:
  1329.                         this.m_State = 9;
  1330.                      case 3:
  1331.                      case 4:
  1332.                      case 5:
  1333.                      case 6:
  1334.                      default:
  1335.                         continue;
  1336.                      case 7:
  1337.                         this.StartPlaying();
  1338.                         continue;
  1339.                   }
  1340.                case 98987:
  1341.                   JMxMediaItem var2 = (JMxMediaItem)var1.arg;
  1342.                   if (var2 != null) {
  1343.                      var2.PrepareMxImage();
  1344.                   }
  1345.  
  1346.                   if (this.m_State == 11 && this.m_WaitForID != null && this.m_WaitForID.equals(var2)) {
  1347.                      this.m_State = 4;
  1348.                      this.SetWaitID((JMxMediaItem)null);
  1349.                      this.HandlePlayEvent();
  1350.                   }
  1351.                   break;
  1352.                case 98988:
  1353.                   try {
  1354.                      this.m_PlayThread.setPriority(this.m_PlayThreadPriority);
  1355.                   } catch (Exception var4) {
  1356.                      ((Throwable)var4).printStackTrace();
  1357.                   }
  1358.  
  1359.                   this.SetupAllImage();
  1360.                   switch (this.m_State) {
  1361.                      case 2:
  1362.                      case 9:
  1363.                         this.StartPlaying();
  1364.                      case 7:
  1365.                      default:
  1366.                         continue;
  1367.                      case 11:
  1368.                         this.m_State = 4;
  1369.                         this.SetWaitID((JMxMediaItem)null);
  1370.                         this.HandlePlayEvent();
  1371.                         continue;
  1372.                   }
  1373.                case 98989:
  1374.                   switch (this.m_State) {
  1375.                      case 2:
  1376.                      case 7:
  1377.                      case 9:
  1378.                         this.DrawFirstFrame();
  1379.                   }
  1380.             }
  1381.          }
  1382.       }
  1383.    }
  1384.  
  1385.    public boolean HandleMouseExit(Event var1) {
  1386.       if (this.m_BrowserFrame != null) {
  1387.          this.m_BrowserFrame.setCursor(0);
  1388.       }
  1389.  
  1390.       if (this.m_MouseEffectMedia != null) {
  1391.          Graphics var2 = ((Component)this).getGraphics();
  1392.          Graphics var3 = this.m_OffScrImage.getGraphics();
  1393.          this.HideMouseEffect(this.m_MouseEffectMedia, var2, var3, true);
  1394.          var2.dispose();
  1395.          var3.dispose();
  1396.          this.m_MouseEffectMedia = null;
  1397.       }
  1398.  
  1399.       this.m_CurMousePoint.x = -1;
  1400.       this.m_CurMousePoint.y = -1;
  1401.       this.m_LogicClickMedia = null;
  1402.       return true;
  1403.    }
  1404.  
  1405.    public boolean Play() {
  1406.       this.m_State = 1;
  1407.       this.m_PlayThread = new Thread(this, "NetMC PlayThread");
  1408.       this.m_PlayThread.start();
  1409.       return true;
  1410.    }
  1411.  
  1412.    public void HandleStopEvent(Thread var1) {
  1413.       this.m_PlayTimer.Stop();
  1414.       this.m_ScrollTimer.Stop();
  1415.       this.m_MediaLoader.Suspend();
  1416.       if (this.m_PlayThread.isAlive()) {
  1417.          int var2 = this.m_PlayThread.getPriority();
  1418.          if (var2 != this.m_PlayThreadPriority) {
  1419.             try {
  1420.                this.m_PlayThread.setPriority(this.m_PlayThreadPriority);
  1421.             } catch (Exception var12) {
  1422.                ((Throwable)var12).printStackTrace();
  1423.             }
  1424.          }
  1425.       }
  1426.  
  1427.       this.CloseAllMedia(false);
  1428.       this.ResetAllData();
  1429.       switch (this.m_State) {
  1430.          case 2:
  1431.             this.m_State = 3;
  1432.             break;
  1433.          case 7:
  1434.             this.m_State = 8;
  1435.             break;
  1436.          case 9:
  1437.             this.m_State = 10;
  1438.             break;
  1439.          default:
  1440.             this.m_State = 5;
  1441.       }
  1442.  
  1443.       if (this.m_BrowserFrame != null) {
  1444.          this.m_BrowserFrame.setCursor(0);
  1445.       }
  1446.  
  1447.       this.m_EventQ.FlushAll();
  1448.       if (var1.isAlive()) {
  1449.          synchronized(this){}
  1450.  
  1451.          try {
  1452.             try {
  1453.                this.notifyAll();
  1454.                this.wait();
  1455.             } catch (Exception var10) {
  1456.                ((Throwable)var10).printStackTrace();
  1457.             }
  1458.          } catch (Throwable var11) {
  1459.             throw var11;
  1460.          }
  1461.  
  1462.       }
  1463.    }
  1464.  
  1465.    private void SetNextPlayEvent() {
  1466.       this.m_PlayInterval = this.m_NewNextStartTime - this.m_NextStartTime;
  1467.       this.m_NextStartTime = this.m_NewNextStartTime;
  1468.       if (!this.m_ScrollList.IsEmpty()) {
  1469.          this.m_ScrollSpeed = MX_SCROLL_SLOW;
  1470.          Position var1 = this.m_ScrollList.GetHeadPosition();
  1471.  
  1472.          JMxMedia var3;
  1473.          for(Object var2 = null; var1.element != null; this.m_ScrollSpeed = Math.min(this.m_ScrollSpeed, var3.GetTransInLength())) {
  1474.             var3 = (JMxMedia)this.m_ScrollList.GetNext(var1);
  1475.          }
  1476.  
  1477.          this.m_ScrollInterval = this.m_ScrollSpeed * 10;
  1478.          if (this.m_ScrollInterval > this.m_PlayInterval && this.m_PlayInterval != 0) {
  1479.             this.m_ScrollInterval = this.m_PlayInterval - 10;
  1480.          }
  1481.  
  1482.          this.m_ScrollTickCount = 0;
  1483.          this.m_ScrollTimer.Start((long)this.m_ScrollInterval);
  1484.       } else {
  1485.          this.m_ScrollInterval = 0;
  1486.          this.m_ScrollSpeed = MX_SCROLL_SLOW;
  1487.          this.m_ScrollTickCount = -1;
  1488.       }
  1489.  
  1490.       if (this.m_PlayInterval > 0) {
  1491.          this.m_PlayTimer.Start((long)this.m_PlayInterval);
  1492.       }
  1493.  
  1494.    }
  1495.  
  1496.    public void ChangeCursorType(int var1) {
  1497.       if (this.m_BrowserFrame != null) {
  1498.          this.m_BrowserFrame.setCursor(var1);
  1499.       }
  1500.  
  1501.    }
  1502. }
  1503.